智汇华云 | AIOps之动态阈值—SARIMA模型详解(一)
近年来,IT运营人工智能(AIOps)已成为了应对IT系统与日俱增的复杂性的很好的解决方案。AIOps基于大数据、数据分析和机器学习来提供洞察力,并为管理现代基础设施和软件所需的任务提供更高水平的自动化(不依赖于人类操作员)。
因此,AIOps具有巨大的价值。展望未来,AIOps将在IT团队提高效率方面发挥关键作用。它还会使应用复杂的下一代技术成为可能,而且那些技术的复杂性是传统解决方案无法胜任的。
华云数据“智汇华云”专栏本期将为您带来AIOps之动态阈值—SARIMA模型详解(一)。
本期讲解人
张歆纬
运维开发组研发工程师
通过使用数据收集、数据分析和机器学习相结合的完整AIOps解决方案,IT Ops团队可以支持以下几个关键使用场景:
异常检测。也许AIOps最基本的使用案例就是检测数据中的异常,然后根据需要对它们做出反应。
原因分析。AIOps还可帮助IT Ops团队自动执行根本原因分析,从而快速解决问题。
预测。AIOps可以让工具能对未来进行自动预测,例如用户流量在特定的时间点可能会怎样的变化,然后做出相应的反应。
报警管理。AIOps在帮助IT Ops团队应对他们必须处理的大量警报,以支持正常的运营方面发挥着越来越重要的作用。
智能修复。AIOps通过自动化工具驱动闭环的故障修复,而不依赖于运维人员。
异常检测以定位问题并了解基础架构和应用程序中的趋势是AIOps的一个关键用例。检测可以让工具探测出异常行为(例如某个服务器响应速度比平时慢,或受黑客攻击而出现异常的网络行为)并作出相应的反馈。
在很多情况下,在现代软件环境中进程异常检测,对于AIOps而言还是特别具有挑战性。因为在许多情况下,并没有通用的方法去定义合理的触发条件。例如对于在整个环境中的网络流量、内存和存储空间消耗而言,它们的波动还是会很大的。那么活跃用户量或应用程序实例也是如此。在这些情况下进行有效监测需要AIOps能采用足够智能的工具来设置动态基线。动态基线(阈值)为工具设置特定的情况下(例如一天中的时段和应用程序的注册用户数)正常活动的范围,然后检测与动态基线不匹配的数据或事件。
下面,就给大家讲解一下我们这次用到的SARIMA模型,用于预测指标动态阈值,从而检测异常。
SARIMA模型的全称是Seasonal Auto Regressive Integrated Moving Average,中文是周期性自回归差分移动平均。SARIMA模型是一种预测周期性的时间序列效果非常好的模型。SARIMA模型的目标是描述数据的自相关性。要理解SARIMA模型,我们首先需要了解平稳性的概念以及差分时间序列的技术。
总的来说,一个时间序列,如果均值没有系统性的变化(无趋势),方差没有系统变化,且消除了周期性变化,就称之为平稳的。
显然,图(d), (h), (i)有一定的周期性,所以不平稳。图(a), (c), (e), (f), (i)有一定的趋势性,并且图(i)的方差在增长,所以不平稳。只有图(b)和(g)是平稳的。可能大家第一眼看到图(g)觉得有周期性,其实是没有的,因为这是猞猁的代际数量,在长期来看,这并没有周期性,所以这个时间序列是平稳的。
我们可以看到图(a)是谷歌股价图,这是不平稳的。但图(b)是股价每天的变化量,这是平稳的。这就是一种让不平稳的时间序列变为平稳时间序列的方法,计算连续时间数据点之间的差,这就是差分。
类似于取对数log的方法可以使时间序列的方差变平稳,差分通过消除时间序列的变化量,从而使时间序列的平均值变平稳,来达到消除趋势性和周期性。
自相关系数是用来测定时间序列的两个时刻的值的线性关系。比如r1是测量yt和yt-1的关系,r2是测量yt和yt-2的关系。
T是时间序列的长度,k是延迟lag。
ACF(autocorrelation function)图是一种非常有效的来判断时间序列平稳性的方法。
如果数据有趋势性,那么对于较小的延迟,自相关性趋向于比较大并且为正。当延迟增大时,ACF会慢慢变小。
如果数据有周期性,对于周期性的延迟,自相关性会比较大一些。
如果数据既有周期性又有趋势性,你就会看到两者的结合。
这张图是澳大利亚电力需求图,可以看到这组数据既有周期性,又有趋势性。
画出ACF图如下:
可以看到,因为趋势性,当延迟变大时,ACF慢慢变小。因为周期性,图像会有峰谷的感觉。
一个时间序列如果没有任何自相关性就可以称为白噪声。
这是一个白噪声的例子,我们画出它的ACF图:
我们期望所有的ACF值接近于0,但因为一些随机变化,他们不可能正好等于0。对于白噪声,我们期望95%的ACF突刺都在±2/√T之间,T是时间序列的长度。通常我们会画出这些范围,图上用蓝线表示。如果超过5%的突刺超出了这个范围,这个时间序列就可能不是白噪声。
差分序列是连续数据点之间的变化量,可以写成 y_t^'=y_t-y_(t-1)。
当差分序列是白噪声时,这个模型可以写成 y_t-y_(t-1)=ε_t,ε_t表示白噪声。
重新排列一下,我们可以得到随机漫步模型 y_t=y_(t-1)+ε_t。
有时一次差分的数据看起来还是不平稳,这就需要二次差分来获得一个平稳的序列。
y_t^''=y_t^'-y_(t-1)^'
=(y_t-y_(t-1) )-(y_(t-1)-y_(t-2))
=y_t-2y_(t-1)+y_(t-2)
周期性差分是一个数据点和前一个周期同一时间的数据点的差。
y_t^'=y_t-y_(t-m)
这里的m是周期的数量。这也叫做”lag-m differences”。
决定是否需要差分可以用单位根检验。我们这里使用KPSS test,在这个检测中,零假设是数据是平稳的,我们要找出零假设不为真的证据。得到比较小的p值,比如0.05,就可以认为零假设不成立,数据不平稳,我们就需要对时间序列进行差分。
当我们在研究时间序列延迟的时候,后移符号B非常有用。
By_t=y_(t-1)
B用在yt上,是把数据后移一个周期。两次B运算就是把数据后移两个周期。
B(By_t )=B^2 y_t=y_(t-2)
对于每月采集一次的数据,如果我们想要去年同月的数据,表示为 B^12 y_t=y_(t-12)。
后移符号对于差分过程的表示非常方便,比如一次差分可以写成:
y_t^'=y_t-y_(t-1)=y_t-By_t=(1-B) y_t
一次差分可以表示为(1-B),那么同样,二次差分可以写成:
y_t^''=y_t-2y_(t-1)+y_(t-2)=(1-2B+B^2 ) y_t=(1-B)^2 y_t
一般来说,d次差分可以写成 (1-B)^d y_t。
后移符号在组合差分的时候非常有用,比如,周期性的差分组合一次差分可以写成:
(1-B)(1-B^m ) y_t=(1-B-B^m+B^(m+1) ) y_t
=y_t-y_(t-1)-y_(t-m)+y_(t-m-1)
相关阅读
智汇华云 | Kernel bypass技术及其在Ceph中的应用介绍
点击阅读原文,了解华云数据更多信息